expander: fix sizes in resize_toplevel
authorTimm Bäder <mail@baedert.org>
Tue, 6 Mar 2018 16:36:04 +0000 (17:36 +0100)
committerTimm Bäder <mail@baedert.org>
Tue, 6 Mar 2018 17:12:49 +0000 (18:12 +0100)
We can't use gtk_widget_get_allocation for either non-anchored widgets
(which happens with the child widget when the expander is unexpanded)
nor toplevel windows since that will include the window decorations.

Fixes #70 in gtk4

gtk/gtkexpander.c

index 48ab8c50fadb66043acf15b6f2ee3328e087decc..4b7fb1490917f0abd6e4118151c3a3d292df33a0 100644 (file)
@@ -723,31 +723,24 @@ gtk_expander_resize_toplevel (GtkExpander *expander)
     {
       GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (expander));
 
-      if (toplevel && gtk_widget_get_realized (toplevel))
+      if (toplevel && GTK_IS_WINDOW (toplevel) &&
+          gtk_widget_get_realized (toplevel))
         {
-          GtkAllocation toplevel_allocation;
-          GtkAllocation child_allocation;
+          int toplevel_width, toplevel_height;
+          int child_height;
 
-          gtk_widget_get_allocation (toplevel, &toplevel_allocation);
-          gtk_widget_get_allocation (child, &child_allocation);
+          gtk_widget_measure (child, GTK_ORIENTATION_VERTICAL, -1,
+                              &child_height, NULL, NULL, NULL);
+          gtk_window_get_size (GTK_WINDOW (toplevel), &toplevel_width, &toplevel_height);
 
           if (priv->expanded)
-            {
-              GtkRequisition child_requisition;
-
-              gtk_widget_measure (child, GTK_ORIENTATION_VERTICAL, child_allocation.width,
-                                  &child_requisition.height, NULL, NULL, NULL);
-
-              toplevel_allocation.height += child_requisition.height;
-            }
+            toplevel_height += child_height;
           else
-            {
-              toplevel_allocation.height -= child_allocation.height;
-            }
+            toplevel_height -= child_height;
 
           gtk_window_resize (GTK_WINDOW (toplevel),
-                             toplevel_allocation.width,
-                             toplevel_allocation.height);
+                             toplevel_width,
+                             toplevel_height);
         }
     }
 }